import { pgTable, uuid, varchar, smallint, text, integer, index } from 'drizzle-orm/pg-core';
import { sql } from 'drizzle-orm';
import { simpleAuditFields } from './audit-fields';

/**
 * 系统-审计日志表
 */
export const sysAuditLog = pgTable(
  'sys_audit_log',
  {
    /** 日志ID（主键） */
    id: uuid('id').primaryKey().default(sql`uuidv7()`),
    /** 用户ID */
    userId: uuid('user_id'),
    /** 用户名 */
    username: varchar('username', { length: 50 }),
    /** 操作模块 */
    module: varchar('module', { length: 50 }),
    /** 操作类型（1.查询 2.新增 3.修改 4.删除 5.导出 6.导入 7.登录 8.登出 9.其他） */
    operationType: smallint('operation_type').notNull(),
    /** 操作描述 */
    description: varchar('description', { length: 512 }),
    /** 请求方法（GET, POST, PUT, DELETE等） */
    method: varchar('method', { length: 10 }),
    /** 请求路径 */
    path: varchar('path', { length: 512 }),
    /** 请求参数 */
    params: text('params'),
    /** 请求 Body */
    body: text('body'),
    /** 响应状态码 */
    statusCode: integer('status_code'),
    /** 响应数据 */
    response: text('response'),
    /** 错误信息 */
    errorMsg: text('error_msg'),
    /** IP地址 */
    ip: varchar('ip', { length: 50 }),
    /** User-Agent */
    userAgent: varchar('user_agent', { length: 512 }),
    /** 执行时长（毫秒） */
    duration: integer('duration'),
    ...simpleAuditFields(),
  },
  (table) => [
    index('sys_audit_log_user_id_idx').on(table.userId),
    index('sys_audit_log_operation_type_idx').on(table.operationType),
    index('sys_audit_log_created_at_idx').on(table.createdAt),
  ]
);

export type SysAuditLog = typeof sysAuditLog.$inferSelect;
export type NewSysAuditLog = typeof sysAuditLog.$inferInsert;

